part of '../repository.dart';

const _kSubscriptionPurchaseItemTypeValue = 'subscription';
const _kLifetimePurchaseItemTypeValue = 'lifetime_purchase_item';

class _PurchaseItemTypeDto extends Equatable {
  const _PurchaseItemTypeDto._internal({
    required this.purchaseItemTypeString,
  });

  final String purchaseItemTypeString;

  @override
  List<Object?> get props {
    return [
      purchaseItemTypeString,
    ];
  }

  factory _PurchaseItemTypeDto.fromString(String purchaseItemTypeString) {
    return _PurchaseItemTypeDto._internal(
      purchaseItemTypeString: purchaseItemTypeString,
    );
  }

  factory _PurchaseItemTypeDto.fromEntity(PurchaseItemType purchaseItemType) {
    final purchaseItemTypeString = switch (purchaseItemType) {
      PurchaseItemType.subscription => _kSubscriptionPurchaseItemTypeValue,
      PurchaseItemType.lifetimePurchaseItem => _kLifetimePurchaseItemTypeValue,
    };

    return _PurchaseItemTypeDto._internal(
      purchaseItemTypeString: purchaseItemTypeString,
    );
  }

  @override
  String toString() {
    return purchaseItemTypeString;
  }

  PurchaseItemType toEntity() {
    return switch (purchaseItemTypeString) {
      _kSubscriptionPurchaseItemTypeValue => PurchaseItemType.subscription,
      _kLifetimePurchaseItemTypeValue => PurchaseItemType.lifetimePurchaseItem,
      _ => throw UnimplementedError(),
    };
  }
}
